import { useUserStore } from '~/store/useUser'

/**
 * 客户端认证守卫插件
 * 自动为需要认证的路由添加检查
 */
export default defineNuxtPlugin(() => {
  const router = useRouter()
  const userStore = useUserStore()

  // 需要登录的页面路径
  const protectedRoutes = [
    '/chat',
    '/myOrder',
    '/myBill',
    '/myHomePage',
    '/myAttention',
    '/shoppingCart',
    '/buyGoods',
    '/pay',
    '/orderDetails',
    '/invoice',
    '/setUp',
    '/EditUser',
    '/CreateUser',
    '/RealName',
    '/manageMembers',
    '/companyHome'
  ]

  // 需要卖家权限的页面
  const sellerOnlyRoutes = [
    '/companyHome',
    '/manageMembers'
  ]

  // 需要买家权限的页面
  const buyerOnlyRoutes = [
    '/shoppingCart',
    '/buyGoods',
    '/pay',
    '/myOrder',
    '/orderDetails',
    '/invoice'
  ]

  // 需要公司信息的页面
  const companyRequiredRoutes = [
    '/companyHome',
    '/manageMembers'
  ]

  // 路由前置守卫
  router.beforeEach(async (to, from, next) => {
    console.log('Auth Guard: 检查路由', to.path)

    // 检查是否是受保护的路由
    const isProtected = protectedRoutes.some(route => to.path.startsWith(route))
    
    if (!isProtected) {
      console.log('Auth Guard: 非受保护路由，允许访问')
      return next()
    }

    // 检查登录状态
    if (!userStore.isLogin) {
      console.log('Auth Guard: 用户未登录，重定向到登录页')
      ElMessage.warning('请先登录')
      return next('/login')
    }

    // 确保有用户信息
    const userInfo = userStore.getUserInfo
    if (!userInfo || Object.keys(userInfo).length === 0) {
      console.log('Auth Guard: 缺少用户信息，尝试获取')
      try {
        await userStore.userInfoAction()
      } catch (error) {
        console.error('Auth Guard: 获取用户信息失败', error)
        ElMessage.error('登录状态已过期，请重新登录')
        return next('/login')
      }
    }

  // 角色判断已关闭，仅保留登录和公司信息校验
  // const updatedUserInfo = userStore.getUserInfo
  // // 检查卖家权限
  // if (sellerOnlyRoutes.some(route => to.path.startsWith(route))) {
  //   if (updatedUserInfo?.userType !== 'seller') {
  //     console.log('Auth Guard: 需要卖家权限')
  //     ElMessage.warning('此功能仅限卖家使用')
  //     return next('/')
  //   }
  // }
  // // 检查买家权限
  // if (buyerOnlyRoutes.some(route => to.path.startsWith(route))) {
  //   if (updatedUserInfo?.userType !== 'buyer') {
  //     console.log('Auth Guard: 需要买家权限')
  //     ElMessage.warning('此功能仅限买家使用')
  //     return next('/')
  //   }
  // }

    // 检查公司信息
    // if (companyRequiredRoutes.some(route => to.path.startsWith(route))) {
    //   if (!updatedUserInfo?.companyId || !updatedUserInfo?.companyName) {
    //     console.log('Auth Guard: 需要公司信息')
    //     ElMessage.warning('请先完善公司信息')
    //     return next('/setUp')
    //   }
    // }

    console.log('Auth Guard: 权限检查通过')
    next()
  })

  // 提供全局认证检查方法
  return {
    provide: {
      authGuard: {
        /**
         * 检查是否可以访问指定路径
         * @param path 路径
         * @returns boolean
         */
        canAccess(path: string): boolean {
          const isProtected = protectedRoutes.some(route => path.startsWith(route))
          
          if (!isProtected) return true
          if (!userStore.isLogin) return false
          
          const userInfo = userStore.getUserInfo
          if (!userInfo || Object.keys(userInfo).length === 0) return false
          
          // 角色判断关闭，忽略 buyer/seller 类型
          
          // 检查公司信息
          if (companyRequiredRoutes.some(route => path.startsWith(route))) {
            return !!(userInfo.companyId && userInfo.companyName)
          }
          
          return true
        },

        /**
         * 获取路径所需的权限信息
         * @param path 路径
         * @returns object
         */
        getRequiredPermissions(path: string) {
          return {
            requireAuth: protectedRoutes.some(route => path.startsWith(route)),
            // 角色判断已关闭
            requireSeller: false,
            requireBuyer: false,
            requireCompany: companyRequiredRoutes.some(route => path.startsWith(route))
          }
        }
      }
    }
  }
})